package me.spring.cloud.common.components.util.enums;

import me.spring.cloud.common.components.util.enums.inter.EnumLeab;
import me.spring.cloud.common.components.util.enums.inter.RegularEnum;
import java.util.regex.Pattern;
import lombok.AllArgsConstructor;
import lombok.Getter;

/**
 * @description: 数字类型
 * @author: luffy
 * @create: 2018-07-20 16:26
 **/
@Getter
@AllArgsConstructor
public enum DigitalTypeEnum implements RegularEnum<String>, EnumLeab<String> {
  /**
   * 整数
   */
  Integer("^(0|[-+]?[1-9][0-9]*)$", "整数"),
  /**
   * 非负整数
   */
  Non_negative_integer("^(0|\\+?[1-9][0-9]*)$", "非负整数"),
  /**
   * 非正整数
   */
  Non_positive_integer("^(0|\\-?[1-9][0-9]*)$", "非正整数"),
  /**
   * 非0正整数
   */
  Non_zero_positive_integer("^\\+?[1-9][0-9]*$", "非0正整数"),
  /**
   * 非0负整数
   */
  Non_zero_negative_integer("^\\-?[1-9][0-9]*$", "非0负整数"),

  /**
   * 浮点数
   */
  Floating("^(-?\\d+)(\\.\\d+)?", "浮点数"),
  /**
   * 非负浮点数
   */
  Non_negative_floating("^(0|[1-9][0-9]*)(\\.\\d+)?$", "非负浮点数"),
  /**
   * 正浮点数
   */
  Positive_floating("^(([1-9][0-9]*)|(((0)|([1-9][0-9]))\\.[0-9]*[1-9][0-9]*)|([1-9][0-9]*\\.[0-9]+))$", "正浮点数"),
  /**
   * 非正浮点数
   */
  Non_positive_floating("^((-\\d+(\\.\\d+)?)|(0+(\\.0+)?))$", "非正浮点数"),
  /**
   * 负浮点数
   */
  Negative_floating("^(-(([0-9]+\\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\\.[0-9]+)|([0-9]*[1-9][0-9]*)))$", "负浮点数"),

  /**
   * 数字
   */
  Number("^[0-9]*$", "数字"),
  /**
   * 实数
   */
  Real_number("^[-+]?\\d+(\\.\\d+)?$", "实数");
  private String regular;
  private String leab;

  public boolean matches(String string) {
    Pattern pattern = Pattern.compile(this.regular);
    return pattern.matcher(string).matches();
  }
}
